home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1997 November & December / Amiga-CD 1997 #11-12.iso / pd-disketten / dms-gepackt / 8_95 / apd-8-95-2.dms / apd-8-95-2.adf / ARexx Duett / NextError_BAsm.ged < prev    next >
Text File  |  1995-05-10  |  8KB  |  313 lines

  1. /* Show errors produced by Assemble_BAsm.ged.
  2. **
  3. ** This ARexx script show the next of the errors in the
  4. ** error list of BAsm, after a Assemble_BAsm.ged run.
  5. ** GoldEd is used to display the errors.
  6. **
  7. ** Written and copyright in 1995 by Ulrich Flegel.
  8. ** All rights are reserved to the author Ulrich Flegel.
  9. **
  10. ** The "Amiga Magazin" magazine has permission to distribute this script on the
  11. ** service disk  of  the june issue 1995.  No other person or distributor is allowed
  12. ** to distribute this source without written permission from the author.
  13. **
  14. ** system requirements:
  15. **    Assemble_BAsm.ged    (V1.0    or higher)
  16. **    GoldEd            (V2.20   or higher)
  17. **    BAsm            (V1.123  or higher)
  18. **    SetEnv            (AmigaOS release)
  19. **    rx            (ARexx   release)
  20. **
  21. ** current version of this script:
  22. **
  23. ** $VER: NextError_BAsm.ged V1.0 (09-May-95)
  24. **
  25. ** usage:
  26. ** call as ARexx Macro from GoldEd as: NextError_BAsm.ged
  27. ** 
  28. */
  29.  
  30. /*============================================================================*/
  31.  
  32. OPTIONS RESULTS                    /* enable return codes     */
  33.  
  34. /*============================================================================*/
  35.  
  36. /* parameters used to control this program */
  37.  
  38. /* NextError_BAsm.ged  Port_GoldEd */
  39.  
  40. ARG Port_GoldEd
  41.  
  42. /*============================================================================*/
  43.  
  44. /* adapt the following variables to your system environment: */
  45.  
  46. Assemble        = 'GoldEd:ARexx/Assemble_BAsm.ged'    /* here substitute the complete path/name of the Assemble_BAsm.ged script */
  47.  
  48. /*============================================================================*/
  49.  
  50. /* Only Assembl_BAsm.ged may supply the parameter Port_GoldEd above !! */
  51. /* If parameter correct, it is assumed, that the first error is not to be skipped */
  52.  
  53. IF (LEFT(Port_GoldEd, 6) = 'GOLDED') THEN
  54.     InvokedByAssembleScript = TRUE
  55. ELSE
  56.     InvokedByAssembleScript = FALSE
  57.  
  58. /*============================================================================*/
  59.  
  60. BAsmError_Max        = 200
  61. BAsmError_OK        = 0
  62. BAsmError_False        = 20
  63. BAsmError_OpenError    = 1
  64. BAsmError_SourceError    = 2
  65. BAsmError_ReadError    = 3
  66. BAsmError_UnknownOption    = 4
  67. BAsmError_MemoryError    = 5
  68. BAsmError_NoSourceFile    = 6
  69. BAsmError_NoNextError    = 7
  70. BAsmError_NoErrorList    = 8
  71. BAsmError_NoNextWarning    = 9
  72. BAsmError_NoWarningList    = 10
  73.  
  74. /*============================================================================*/
  75.  
  76. /* ARexx ports used */
  77.  
  78. Port_BAsm='rexx_BASM'
  79.  
  80. IF (Port_GoldEd='') THEN Port_GoldEd=ADDRESS()
  81. IF (LEFT(Port_GoldEd, 6) ~= 'GOLDED') THEN Port_GoldEd='GOLDED.1'
  82.  
  83. /*============================================================================*/
  84.  
  85. ScriptErrorLevel = 6
  86.  
  87. SIGNAL ON SYNTAX                /* ensure clean exit       */
  88.  
  89. IF ~ SHOW('P', Port_GoldEd) THEN        /* is GoldEd AREXX port available ? */
  90. DO
  91.     Say 'This script may only called by GoldEd!'
  92. END
  93. ELSE
  94. DO
  95.  
  96. ADDRESS VALUE Port_GoldEd
  97. OPTIONS FAILAT 21
  98. 'LOCK CURRENT'                    /* lock GUI, gain access   */
  99. OPTIONS FAILAT ScriptErrorLevel            /* ignore warnings         */
  100.  
  101. /*============================================================================*/
  102.  
  103. /*
  104. ** Non localized strings used
  105. */
  106.  
  107.  
  108. STRING_ThisScript='NextError_BAsm.ged'
  109.  
  110. /*
  111. ** Localization of strings used
  112. */
  113.  
  114. ADDRESS VALUE Port_GoldEd
  115. 'QUERY CAT'
  116. Language=RESULT
  117. SELECT
  118. WHEN Language='deutsch' THEN
  119.     DO
  120.     STRING_Positive='OK'
  121.     STRING_Negative='Abbrechen'
  122.     STRING_Dismiss='Aufgeben'
  123.     STRING_BAsmFailure_Title='BAsm Fehler-Report'
  124.     ERROR_NoBAsm='Der Source wurde noch nicht assembliert! Soll dies JETZT geschehen?'
  125.     ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!'
  126.     ERROR_BASM_NoNextErrorWarning='Keine weiteren Fehler bzw. Warnungen vorhanden!'
  127.     ERROR_BASM_NoErrorWarningList='Keine Fehlerliste bzw. Warnungsliste vorhanden!'
  128.     END
  129. /*
  130. WHEN Language='XXX' THEN
  131.     DO
  132.     STRING_Positive='XXX'
  133.     STRING_Negative='XXX'
  134.     STRING_Dismiss='XXX'
  135.     STRING_BAsmFailure_Title='XXX'
  136.     ERROR_NoBAsm='XXX!'
  137.     ERROR_BASM_UnknownErrorCode='XXX!'
  138.     ERROR_BASM_NoNextErrorWarning='XXX!'
  139.     ERROR_BASM_NoErrorWarningList='XXX!'
  140.     END
  141. */
  142. OTHERWISE
  143.     DO
  144.     STRING_Positive='OK'
  145.     STRING_Negative='Cancel'
  146.     STRING_Dismiss='Dismiss'
  147.     STRING_BAsmFailure_Title='BAsm error report'
  148.     ERROR_NoBAsm='The source is not yet assembled! Assemble NOW?'
  149.     ERROR_BASM_UnknownErrorCode='An unknown error occurred!'
  150.     ERROR_BASM_NoNextErrorWarning='No more errors/warnings!'
  151.     ERROR_BASM_NoErrorWarningList='No error/warnings list!'
  152.     END
  153. END
  154.  
  155. /*============================================================================*/
  156.  
  157. /*
  158. ** Finally do something 
  159. */
  160.  
  161. IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm running ? */
  162.     DO
  163.     ADDRESS VALUE Port_GoldEd
  164.     'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoBAsm||'" BUTTON="'||STRING_Positive||'|'||String_Negative||'"'
  165.     IF (RESULT = 1) THEN ADDRESS COMMAND 'SYS:RexxC/rx '||Assemble
  166.     END
  167. ELSE
  168.     DO
  169.     OPTIONS FAILAT BAsmError_NoWarningList+1
  170.  
  171.     ADDRESS VALUE Port_BAsm
  172.  
  173.     IF (InvokedByAssembleScript = TRUE) THEN    /* do not step over first error/warning! */
  174.         DO
  175.  
  176.         'BINITERROR'
  177.         IF (RC = BAsmError_NoErrorList) THEN
  178.             CALL RexxSetEnv( 'BAsmError.ged', 'end' )
  179.         ELSE
  180.             CALL RexxSetEnv( 'BAsmError.ged', 'init' )
  181.  
  182.         'BINITWARNING'
  183.         IF (RC = BAsmError_NoWarningList) THEN
  184.             CALL RexxSetEnv( 'BAsmWarning.ged', 'end' )
  185.         ELSE
  186.             CALL RexxSetEnv( 'BAsmWarning.ged', 'init' )
  187.  
  188.         END
  189.  
  190.     ErrorState   = RexxGetEnv( 'BAsmError.ged' )
  191.     WarningState = RexxGetEnv( 'BAsmWarning.ged' )
  192.  
  193.     SELECT
  194.     WHEN (ErrorState = 'init') THEN    CALL RexxSetEnv( 'BAsmError.ged', 'step' )
  195.     WHEN (ErrorState = 'step') THEN
  196.         DO
  197.         'BNEXTERROR'
  198.         IF (RC = BAsmError_NoNextError) THEN
  199.             DO
  200.             CALL RexxSetEnv( 'BAsmError.ged', 'end' )
  201.             IF (WarningState = 'init') THEN CALL RexxSetEnv( 'BAsmWarning.ged', 'step' )
  202.             END
  203.         END
  204.     WHEN (ErrorState = 'end') THEN
  205.         SELECT
  206.         WHEN (WarningState = 'init') THEN CALL RexxSetEnv( 'BAsmWarning.ged', 'step' )
  207.         WHEN (WarningState = 'step') THEN
  208.             DO
  209.             'BNEXTWARNING'
  210.             IF (RC = BAsmError_NoNextWarning) THEN
  211.                 DO
  212.                 CALL RexxSetEnv( 'BAsmWarning.ged', 'end' )
  213.                 'BEND'
  214.                 ADDRESS VALUE Port_GoldEd
  215.                 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_NoNextErrorWarning||'" BUTTON="'||STRING_Positive||'"'
  216.                 END
  217.             END
  218.         WHEN (WarningState = 'end') THEN 
  219.             DO
  220.             'BEND'
  221.             ADDRESS VALUE Port_GoldEd
  222.             'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_NoErrorWarningList||'" BUTTON="'||STRING_Positive||'"'
  223.             END
  224.         OTHERWISE Say "Internal error: Invalid warning state!"
  225.         END
  226.     OTHERWISE Say "Internal error: Invalid error state!"
  227.     END
  228.  
  229.     ErrorState   = RexxGetEnv( 'BAsmError.ged' )
  230.     WarningState = RexxGetEnv( 'BAsmWarning.ged' )
  231.  
  232.     IF ((ErrorState = 'step')|(WarningState = 'step')) THEN
  233.         DO
  234.         ADDRESS VALUE Port_BAsm
  235.  
  236.         IF (ErrorState='step') THEN 
  237.             'BGETERROR'
  238.         ELSE
  239.             'BGETWARNING'
  240.  
  241.         IF ((RC = BAsmError_OK)&(RESULT ~= '')) THEN
  242.             DO
  243.             PARSE VAR RESULT FailureLine '|' FailureOffset '|' FailureFile '|' FailureType ' ' FailureNumber ': ' FailureString '.'
  244.             ADDRESS VALUE Port_GoldEd
  245.             'WINDOW FORCE QUIET USE '||FailureFile
  246.             'GOTO BYTE '||FailureOffset
  247.             'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||FailureType||' #'||FailureNumber||' in line '||FailureLine||': '||FailureString||'." BUTTON="'||STRING_Dismiss||'"'
  248.             END
  249.         END
  250.     END
  251.  
  252. OPTIONS FAILAT ScriptErrorLevel
  253.  
  254. /*=============================================================================*/
  255.  
  256. ADDRESS VALUE Port_GoldEd
  257. 'UNLOCK'                    /* VERY important: unlock GUI */
  258.  
  259. END    /* IF ~ SHOW('P', Port_GoldEd) */
  260.  
  261. EXIT
  262.  
  263. SYNTAX:
  264.  
  265. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  266. ADDRESS VALUE Port_GoldEd
  267. 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="Script error!" BUTTON="Who is bad?"'
  268. 'UNLOCK'
  269. EXIT
  270.  
  271.  
  272. RexxSetEnv: PROCEDURE
  273.     PARSE ARG Name,Content
  274.  
  275.     ADDRESS COMMAND 'SetEnv "ENV:'||Name||'" "'||Content||'"'
  276.  
  277.     RETURN
  278.  
  279.  
  280. RexxGetEnv: PROCEDURE
  281.     PARSE ARG Name
  282.  
  283.     IF OPEN(EnvFile,'ENV:'||Name,'r') THEN
  284.         DO
  285.         Content = READLN(EnvFile)
  286.         CALL CLOSE EnvFile
  287.         END
  288.     ELSE Content = ""
  289.  
  290.     RETURN Content
  291.  
  292.  
  293. /*=============================================================================*/
  294.  
  295.  
  296. /*
  297. ** version history:
  298. ** ---------------
  299. **
  300. ** V1.0        : -first public version
  301. **
  302. ** known bugs in the latest version/revision:
  303. ** -----------------------------------------
  304. ** - Not a bug of this script but BAsm:
  305. **    BAsm should return an error value when calling
  306. **    BINITERROR/BINITWARNING while the appropriate
  307. **    list is not available. BAsm though doesn't do
  308. **    this. Therefore it may be necessary to click
  309. **    once on the NextError button in GoldEd for each
  310. **    error/warning list being empty!
  311. */
  312.  
  313.